赤と青など、2つの異なる色の「下」と「上」の範囲を定義するにはどうすればよいですか(HSV色では赤と青が隣り合っていないため)。
これは赤に属しています:
lower_red = np.array([160,20,70])
upper_red = np.array([190,255,255])
これは青に属しています:
lower_blue = np.array([101,50,38])
upper_blue = np.array([110,255,255])
If条件を使用してそれらを組み合わせようとしたり、独自の機能を作成したが機能しない場合、解決策を教えていただけますか?
P/s:OpenCV in Python
color
sの2つのマスクを取得したら、cv2.bitwise_or
を使用して最終的なマスクを取得します。
import cv2
## Read
img = cv2.imread("sunflower.jpg")
## convert to hsv
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
## mask of green (36,0,0) ~ (70, 255,255)
mask1 = cv2.inRange(hsv, (36, 0, 0), (70, 255,255))
## mask o yellow (15,0,0) ~ (36, 255, 255)
mask2 = cv2.inRange(hsv, (15,0,0), (36, 255, 255))
## final mask and masked
mask = cv2.bitwise_or(mask1, mask2)
target = cv2.bitwise_and(img,img, mask=mask)
cv2.imwrite("target.png", target)
ソース:
緑と黄色を見つける(範囲はそれほど正確ではありません):
ところで、より正確な範囲を取得するために、これは私の関連する回答の参照マップです:
以下の画像は、色相、彩度、明度(または明度)を使用して機能するHSV色空間を示しています。
HSV色空間で作業する場合、これを覚えておくことが重要であり、Red&Greenなどの概念は、別のデータ型への一種の変換です。
上境界と下境界は、この空間内の1つのポイントのみにすることができますが、赤と青のスペクトルの一部、つまり紫を含めることができます。必要な処理出力の基準を満たすしきい値を選択する必要があります。
どちらか、または2つの別々のループを実行します。1つ目は赤をしきい値処理し、2つ目は青をしきい値処理してから、OpenCVブレンド関数を使用して2つの画像をブレンドします。 2つの色空間のブレンドについては こちら を参照してください。
# Make a copy of the image
image_copy = np.copy(image)
## TODO: Define the color selection boundaries in RGB values
# play around with these values until you isolate the blue background
lower_blue = np.array([200,0,0])
upper_blue = np.array([250,250,255])
# Define the masked area
mask = cv2.inRange(image_copy, lower_blue, upper_blue)
# Vizualize the mask
plt.imshow(mask,cmap='gray')